В большинстве случаев требуется пересылать данные по одному телефонному каналу в обоих направлениях одновременно («полнодуплексная связь»); передача и прием совместно используют телефонную полосу частот, которая занимает область приблизительно 300 Гц-3 кГц. Широко используются три полнодуплексных формата: 300 бод FSK (Bell 103) 1200 бод дибитный PSK (Bell 212А) и 2400 бод дибитный PSK (FSK обозначает Frequency-shift Keying — частотная манипуляция, a PSK — Phase-Shift Keying — фазовая манипуляция; о дибитах см. ниже). Модем, предназначенный для передачи со скоростью, скажем, 1200 бод, обычно поддерживает и связь со скоростью 300 бод и т. д. Хотя для использования модема нет необходимости вникать в тонкости кодирования им данных, однако методы кодирования интересны сами по себе, и мы не можем удержаться, чтобы кратко не описать их.
Стандарт на 300 бод (Bell 103) использует частотную манипуляцию (FSK), при которой выбранная пара звуковых тонов обозначает маркер и пробел: 1270 Гц (маркер) и 1070 Гц (пробел) в одном направлении, 2225 Гц и 2025 Гц в другом. Модем Bell 103 очень прост и состоит из переключаемого генератора для передачи и пары звуковых фильтров для приема (рис. 10.19, а). Обратите внимание на использование гибридной цепи (рис. 10.19, б) для разделения передаваемого и принимаемого сигналов. Если принять, что импеданс телефонной линии близок к его номинальному значению 600 Ом, передаваемый сигнал модема (Тх) совершенно не проходит на выход принимаемого сигнала (Rx). На практике гибридные цепи работают не так уж хорошо, потому что импеданс телефонной линии может заметно отклоняться от номинального значения 6000 м (см. разд. 14.5). Поэтому желательно иметь узкополосный приемный фильтр, а это приводит к усложнению модема.
Рис. 10.19. Модем с частотной манипуляцией (а) и гибридная цепь (б).
Упражнение 10.5. Разберитесь, как работает гибридная цепь на рис. 10.19. После этого вы сможете поражать коллег своей эрудицией.
Стандарт на 1200 бод (Bell 212А) работает иначе. Поток цифровых данных группируется в пары бит («дибиты»); каждый из четырех возможных дибит передается в виде заданного сдвига фазы несущей постоянной частоты (00:90°, 01:0°, 10:180° и 11:-90°), с плавным переходом фазы от одного дибита к следующему. Таким образом, скорость передачи дибит составляет 600 Гц. Частота (фазово-модулированной) несущей равна 1200 Гц в одном направлении и 2400 Гц в другом.
Приемный модем расшифровывает данные, определяя разность фаз между соседними дибитами. Эта остроумная идея имеет один недостаток, именно, приемник теряет значение относительной фазы, если поступает длинная последовательность одинаковых дибит. Для того чтобы предотвратить длинные посылки данных с неизменной фазой, передаваемый поток данных рандомизуется (скремблируется) путем выполнения над данными операции исключающего ИЛИ с псевдослучайной последовательностью (генерируемой с помощью 17-разрядного сдвигового регистра с петлей обратной связи из 14-го разряда по исключающему ИЛИ, см. разд. 9.32). На приемном конце выполняется аналогичный процесс дескремблирования.
Полно-дуплексные модемы со скоростью передачи 2400 бод также передают дибиты с фазовым кодированием, хотя и с другим набором фаз. В этих сложных устройствах обычно используются адаптивные корректоры частотных и временных ошибок на телефонной линии, а также глубоко оптимизированные фильтры для передаваемых и принимаемых сигналов. В результате частота ошибок уменьшается в незначительной степени по сравнению с ранними FSK-модемами на 300 бод.
Нет никакой необходимости разрабатывать модемы заново, так как фирмы AMI/Gould, Exar, National, Rockwell, Silicon Systems и ΤΙ выпускают микросхемы и модули модемов. Еще проще купить готовый модем, либо в виде вставной платы, либо в виде отдельного прибора с соединителем в стандарте RS-232 для подключения к компьютеру. Модемы, в зависимости от характеристик, стоят 100–300 долл. Стоит поискать «Hayes-совместимый» модем, воспринимающий стандартизованный набор команд для передачи номера абонента и проч.; эти модемы стали стандартом де-факто для всего связного программного обеспечения.
Полезный совет: передавая через модем файлы данных между компьютерами, используйте модемный протокол с проверкой блоков, например, Kermit или XMODEM. Такой протокол посылает данные блоками фиксированной длины, сопровождая каждый блок контрольной суммой. Приемный модем сравнивает контрольные суммы, автоматически запрашивая повторную передачу дефектных блоков. Принятые таким образом файлы гарантированно не имеют ошибок; напротив, файлы, посланные просто в виде набора кодов ASCII, почти наверняка будут содержать ошибки!
10.20. Параллельная связь: Centronics, SCSI, IPI, GPIB(488)
Для кабельных соединений со скоростными периферийными устройствами параллельная связь обычно оказывается удобнее последовательной. Ниже описаны популярные представители этого направления.
Centronics. Это простой байтовый однонаправленный параллельный порт с квитированием, первоначально предложенный фирмой Centronics и широко используемый для подключения принтеров. В отличие от RS-232 он всегда работает! В табл. 10.6 перечислены сигналы, выходящие на 36-контактный разъем; их полагается передавать по скрученным парам.
На рис. 10.20 показаны временные соотношения этих сигналов.
Рис. 10.20. Временные соотношения для (принтерного) интерфейса Centronics.
Базовые сигналы перечислены в первой группе: D0-D7, STROBE', ACKNLG' и BUSY. Сигнал BUSY является флагом: если он в низком состоянии, принтер не «занят», т. е. готов принимать данные; источник данных (компьютер) устанавливает тогда данные, а затем STROBF (при гарантированной достоверности данных по обе стороны этого импульса). После этого устанавливается в высокое состояние сигнал BUSY, который возвращается в низкое состояние только когда принтер готов принимать следующий байт. Компьютер должен, как это показано на рисунке, наблюдать за состоянием линии BUSY, чтобы определить момент посылки следующего байта. Сигнал ACKNLG' (который представляет собой импульс, а не уровень) можно использовать в качестве сигнала прерывания; не пытайтесь, однако, подменить им сигнал BUSY, потому что он может закончиться к тому времени, когда вы захотите считать его состояние, и вы будете ждать вечно. В состав порта входят еще несколько сигналов, позволяющие обнаружить, что в принтере нет бумаги (РЕ') или что он отключен (ERROR' или BUSY); компьютер может инициализировать принтер (INIT'), запросить автоматический перевод строк (AUTO FEED XT') или послать байт для отмены выбора принтера (установить IN' в высокое состояние, затем послать ASCII-код DC3). Обратите внимание на щедрые временные соотношения в диаграмме синхронизации, с очевидностью рассчитанные на медленные (механические) устройства, которые не могут принимать данные с высокой скоростью.
В большинстве принтеров предусмотрен какой-то объем буферной памяти, что позволяет им быстро принять первую посылку данных, однако в среднем байты можно посылать лишь со скоростью их печати. Для матричного принтера скорость посылки данных составляет 100–300 байт/с. Если вам надо разработать интерфейс Centronics для подключения к магистрали какого-либо компьютера, то самый простой способ организации всех выходных линий заключается в использовании зафиксированных («защелкнутых») данных, управляемых программным вводом-выводом. Линии D0-D7 можно выполнить в виде одного порта, а оставшиеся линии (включая STROBE') в виде второго. Входные сигналы (BUSY и др.) не фиксируйте, просто пропустите их на шину в операции программного чтения.
Полезным дополнением является использование ACKNLG' для возбуждения прерывания. На рис. 10.21 все сказанное проиллюстрировано применительно к магистрали IBM PC.
Рис. 10.21. Порт Centronics для PC.
Заметьте, что организация прерываний в этом случае не составляет труда, поскольку прерывания в PC активизируются перепадом; попросту используйте спад сигнала ACKNLG', как это показано на рис. 10.20. Для запрещения прерываний мы использовали один из фиксируемых выходных бит, как это описывалось в разд. 10.09 и 10.11. Обратите также внимание на использование сигнала магистрали RESET DRV для сброса всех выходов (и прерываний) при включении питания; именно ради этого мы выбрали микросхему `273 восьмиразрядного D-peгистра (в котором предусмотрен вход RESET).
В процессе работы с этим интерфейсом вы избирательно устанавливаете и сбрасываете выходные управляющие сигналы, подавая выходные байты с соответствующим образом установленными или сброшенными битами, в порт В. Поскольку на выходе предусмотрены фиксаторы, вы можете спокойно изменять состояние любого выходного бита, не боясь появления выбросов на других выходах. Однако храните в памяти копию байта, зафиксированного в порте В, чтобы можно было посылать в этот порт новые байты, отличающиеся единственным битом (используя операции И и ИЛИ, см. пример ниже). Импульс STROBE' следует генерировать программно, поскольку в интерфейсе нет безобразных одновибраторов. В программе 10.6 показано, как можно создать «программный импульс» на линии STROBE'.